﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Entidades;
using Acceso_a_Datos;

namespace Negocio
{
    public class PartidaNegocio
    {
        public PartidaEntidades ObtenerPartida(int idUsuario, int idGrilla)
        {
            PartidaEntidades partida = new PartidaEntidades();

            UsuarioNegocio usuarioNeg = new UsuarioNegocio();
            partida.Usuario = usuarioNeg.ObtenerPorId(idUsuario);

            GrillaNegocio grillaNeg = new GrillaNegocio();
            partida.Grilla = grillaNeg.ObtenerPorIdGrilla(idGrilla);
            
            PalabraNegocio palabraNeg = new PalabraNegocio();
            partida.Palabras = palabraNeg.Obtener(idGrilla);

            GrillaJugadaNegocio grillaJugadaNeg = new GrillaJugadaNegocio();
            partida.GrillaJugada = grillaJugadaNeg.Obtener(idUsuario, idGrilla);

            PalabraJugadaNegocio palabraJugadaNeg = new PalabraJugadaNegocio();
            partida.PalabrasJugadas = palabraJugadaNeg.Obtener(idUsuario, idGrilla);

            return partida;
        }

        public void Guardar(PartidaEntidades partida)
        {
            GrillaJugadaNegocio grillaJugadaNeg = new GrillaJugadaNegocio();
            grillaJugadaNeg.Guardar(partida.GrillaJugada);

            PalabraJugadaNegocio palabraJugadaNeg = new PalabraJugadaNegocio();
            palabraJugadaNeg.Guardar(partida.PalabrasJugadas);
        }

        public bool FueResueltaPalabra(PartidaEntidades partida, int numeroPalabra)
        {
            if (partida.PalabrasJugadas != null)
                if (partida.PalabrasJugadas.Find(item => item.NumeroPalabra == numeroPalabra) != null)
                    return true;
            return false;
        }

        public bool Responder(PartidaEntidades partida, int numeroPalabra, string respuesta)
        {
            if (!FueResueltaPalabra(partida, numeroPalabra))
            {
                if (partida.Palabras.Find(item => item.NumeroPalabra == numeroPalabra).Palabra == respuesta.ToLower())
                {
                    // Actualizar palabras jugadas
                    if (partida.PalabrasJugadas == null)
                        partida.PalabrasJugadas = new List<PalabraJugadaEntidades>();
                    
                    PalabraJugadaEntidades palabraJugada = new PalabraJugadaEntidades();
                    palabraJugada.IdUsuario = partida.Usuario.IdUsuario;
                    palabraJugada.IdGrilla = partida.Grilla.IdGrilla;
                    palabraJugada.NumeroPalabra = numeroPalabra;
                    
                    partida.PalabrasJugadas.Add(palabraJugada);

                    // Actualizar grilla jugada
                    if (partida.GrillaJugada == null)
                    {
                        GrillaJugadaEntidades grillaJugada = new GrillaJugadaEntidades();
                        grillaJugada.IdUsuario = partida.Usuario.IdUsuario;
                        grillaJugada.IdGrilla = partida.Grilla.IdGrilla;
                        grillaJugada.Puntaje = 0;
                        
                        partida.GrillaJugada = grillaJugada;
                    }
                    partida.GrillaJugada.Puntaje += 1;

                    return true;
                }
            }

            return false;
        }
    }
}
